# 2.1 多 Agent 协作概念

> **第 2 周 · 第 1 课 · 多 Agent 协作概念 · 预计时长: 30 分钟**

---

## 学习目标

- 理解为什么单个 Agent 在复杂任务中会失败
- 掌握三种核心的多 Agent 协作模式
- 学会用 "团队角色" 的思维设计 Agent 系统
- 通过对比实验直观感受单 Agent vs 多 Agent 的差异

---

## 为什么一个 Agent 不够用？

在 Week 1 中，你已经学会了创建一个能完成特定任务的 Agent。但现实世界的问题往往没有这么简单。

### 一个真实场景：写一份商业计划书

假设你要用 AI 完成以下任务：

> "帮我写一份面向投资人的 AI 医疗创业商业计划书"

**单 Agent 做法：** 把所有要求写进一个 prompt，让一个 Agent 搞定。

**问题在哪里？**

1. **角色冲突**：写市场分析需要行业研究员的视角，写财务预测需要 CFO 的视角，写技术路线需要 CTO 的视角。一个 Agent 试图扮演所有角色时，每个部分都会变得平庸。
2. **上下文过载**：当 prompt 太长，Agent 会遗漏重要细节。
3. **无法自检**：一个人很难发现自己写的东西有什么问题。

### 现实世界的类比

| 场景 | 一个人做 | 团队协作 |
|------|---------|---------|
| 开餐厅 | 厨师+服务员+收银+清洁全包 | 各司其职，效率高，质量好 |
| 做手术 | 一个医生全包 | 主刀+麻醉+护士配合 |
| 写软件 | 一个全栈开发 | 前端+后端+测试+产品 |

**核心原则：专业分工 > 全能通才**

---

## 多 Agent 协作的三种模式

### 模式 1：流水线 (Sequential / Pipeline)

任务按顺序传递，上一个 Agent 的输出是下一个 Agent 的输入。

```
[Agent A: 收集信息] → [Agent B: 分析] → [Agent C: 撰写报告]
```

**适用场景：** 步骤清晰、前后依赖的任务，如：数据采集 → 分析 → 报告。

### 模式 2：并行 (Parallel)

多个 Agent 同时处理不同子任务，最后汇总结果。

```
                → [Agent A: 市场调研] →
[任务拆分]      → [Agent B: 竞品分析] → [汇总整合]
                → [Agent C: 用户访谈] →
```

**适用场景：** 可以拆分的独立子任务，如同时分析多个数据源。

### 模式 3：辩论/评审 (Debate / Review)

多个 Agent 对同一问题给出不同观点，最后由协调者综合判断。

```
[Agent A: 正方观点] ↘
                     → [Agent C: 综合判断]
[Agent B: 反方观点] ↗
```

**适用场景：** 需要多角度分析、避免偏见的决策场景。

---

## 对比实验：单 Agent vs 多 Agent

### 任务

为一家 "AI 健身 App" 写一个完整的产品方案，包括：
1. 用户画像分析
2. 核心功能列表
3. 技术架构建议

### 单 Agent 版本

```python
# 单 Agent 方式 — 所有任务交给一个 Agent
from openai import OpenAI

client = OpenAI()

prompt = """
你是一位产品专家。请为一家 AI 健身 App 写一份产品方案，必须包含：
1. 用户画像分析（目标用户是谁？年龄、收入、健身习惯）
2. 核心功能列表（至少 8 个功能，按优先级排序）
3. 技术架构建议（前端、后端、AI 模型选型）

要求：每个部分至少 300 字，内容具体可执行。
"""

response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": prompt}],
    temperature=0.7,
)

print(response.choices[0].message.content)
```

**单 Agent 的典型问题：**
- 用户画像部分泛泛而谈，缺乏深度
- 功能列表堆砌，缺少优先级逻辑
- 技术架构部分过于表面

### 多 Agent 版本

```python
# 多 Agent 方式 — 三个专业 Agent 各司其职
from openai import OpenAI

client = OpenAI()

# --- Agent 1: 市场研究员 ---
def user_persona_analysis():
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": (
                "你是一位资深用户研究员，专注于健身科技领域。"
                "你的任务是为 AI 健身 App 做详细的用户画像分析，"
                "包括：目标人群细分、痛点分析、使用场景、付费意愿。"
                "请用数据和具体场景支撑你的分析。"
            )},
            {"role": "user", "content": "请为 AI 健身 App 做用户画像分析"},
        ],
        temperature=0.7,
    )
    return response.choices[0].message.content

# --- Agent 2: 产品经理 ---
def feature_design(user_persona: str):
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": (
                "你是一位拥有 10 年经验的产品经理。"
                "根据用户画像，设计 AI 健身 App 的核心功能列表。"
                "每个功能需要说明：功能描述、解决的问题、优先级（P0/P1/P2）、"
                "预计开发周期。"
            )},
            {"role": "user", "content": (
                f"以下是用户画像分析结果：\n{user_persona}\n\n"
                "请基于此设计核心功能列表"
            )},
        ],
        temperature=0.7,
    )
    return response.choices[0].message.content

# --- Agent 3: 技术架构师 ---
def tech_architecture(features: str):
    response = client.chat.completions.create(
        model="gpt-4o",
        messages=[
            {"role": "system", "content": (
                "你是一位资深技术架构师。"
                "根据产品功能需求，给出技术架构建议，包括："
                "前端技术栈、后端架构、数据库选型、AI 模型选型、"
                "部署方案、扩展性考虑。"
            )},
            {"role": "user", "content": (
                f"以下是产品功能需求：\n{features}\n\n"
                "请给出技术架构建议"
            )},
        ],
        temperature=0.7,
    )
    return response.choices[0].message.content

# --- 流水线执行 ---
print("=" * 50)
print("第一步：用户画像分析")
print("=" * 50)
persona = user_persona_analysis()
print(persona[:500] + "...\n")

print("=" * 50)
print("第二步：功能设计")
print("=" * 50)
features = feature_design(persona)
print(features[:500] + "...\n")

print("=" * 50)
print("第三步：技术架构")
print("=" * 50)
architecture = tech_architecture(features)
print(architecture[:500] + "...\n")

print("=" * 50)
print("完整方案已生成")
print("=" * 50)
```

**多 Agent 的优势：**
- 每个 Agent 有明确的专业角色和系统提示
- 前一步的输出作为后一步的上下文（信息传递）
- 每个部分都能做到深入和具体

---

## 核心概念：角色、任务、流程

设计多 Agent 系统时，始终围绕三个要素：

### 1. Agent（角色）

每个 Agent 需要定义：
- **角色 (Role)**：这个 Agent 是谁？（市场研究员、代码审查员、测试工程师...）
- **目标 (Goal)**：这个 Agent 要达成什么？
- **背景 (Backstory)**：这个 Agent 的专业背景和人设

```python
# 一个好角色定义 vs 一个差角色定义

# 差 ❌ — 太模糊
agent = {
    "role": "助手",
    "goal": "帮助用户完成任务",
}

# 好 ✅ — 具体、可操作
agent = {
    "role": "安全审计专家",
    "goal": "识别代码中的安全漏洞，包括 SQL 注入、XSS、CSRF 等常见问题",
    "backstory": (
        "你是一位有 15 年经验的安全工程师，曾就职于多家顶级安全公司。"
        "你擅长发现代码中的安全隐患，并能给出具体修复建议。"
    ),
}
```

### 2. Task（任务）

每个任务需要定义：
- **描述 (Description)**：具体要做什么
- **期望输出 (Expected Output)**：输出格式和内容要求
- **负责 Agent**：谁来执行

### 3. Process（流程）

多个 Agent 和任务如何协作：
- **顺序 (Sequential)**：任务 A → 任务 B → 任务 C
- **层级 (Hierarchical)**：Manager Agent 分配任务给 Worker Agents
- **共识 (Consensus)**：多个 Agent 讨论达成一致

---

## 什么时候用多 Agent？

**该用多 Agent 的信号：**
- 任务需要多种专业技能
- 输出需要自我验证或评审
- 单个 prompt 超过 2000 字且效果变差
- 需要对比多个方案或观点

**不该用多 Agent 的信号：**
- 任务简单，一个 prompt 就能解决
- 对延迟极度敏感（多 Agent 意味着多轮 API 调用）
- 预算有限（多个 Agent = 更多 token 消耗）

---

## 动手练习

### 练习：用多 Agent 思维设计一个 "新闻分析" 系统

**场景：** 你有一个新闻链接，需要分析该新闻对某个行业的影响。

**要求：**
1. 设计 3 个 Agent 角色，写出每个角色的 Role、Goal、Backstory
2. 设计任务流程（流水线 or 并行？）
3. 画出 Agent 之间的数据流向

**提示模板：**

```
Agent 1:
  Role:
  Goal:
  Backstory:
  输入:
  输出:

Agent 2:
  Role:
  Goal:
  Backstory:
  输入:
  输出:

Agent 3:
  Role:
  Goal:
  Backstory:
  输入:
  输出:

流程: Agent 1 → Agent 2 → Agent 3 (或者其他组合)
```

**参考答案（先自己设计再看）：**

```
Agent 1 — 新闻分析师:
  Role: 新闻事实提取与分析专家
  Goal: 从新闻中提取关键事实、人物、事件和时间线
  Backstory: 资深记者，擅长快速从长文中提炼核心信息
  输入: 新闻原文或链接
  输出: 结构化的事实摘要（5W1H）

Agent 2 — 行业专家:
  Role: 特定行业分析师
  Goal: 评估新闻对该行业的短期和长期影响
  Backstory: 10 年行业研究经验，熟悉市场动态和竞争格局
  输入: Agent 1 的事实摘要 + 目标行业
  输出: 影响分析报告（短期影响、长期趋势、风险提示）

Agent 3 — 投资顾问:
  Role: 投资策略师
  Goal: 基于影响分析给出可操作的投资建议
  Backstory: 前基金经理，擅长将宏观分析转化为投资策略
  输入: Agent 2 的影响分析报告
  输出: 投资建议（买入/卖出/观望 + 理由）

流程: 流水线 — Agent 1 → Agent 2 → Agent 3
```

---

## 总结

- **单 Agent 的局限**：角色冲突、上下文过载、缺乏自检能力
- **三种协作模式**：流水线（顺序传递）、并行（同时处理）、辩论/评审（多角度分析）
- **三个核心要素**：角色定义要具体、任务描述要清晰、流程设计要合理
- **选择标准**：任务复杂度决定是否用多 Agent，不是所有场景都需要

**下节课预告：** 我们将学习 CrewAI — 一个专门用于构建多 Agent 协作系统的 Python 框架，把今天学的概念变成可运行的代码。
